package com.ruoyi.app.config.util;

import lombok.extern.slf4j.Slf4j;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.concurrent.ThreadLocalRandom;

@Slf4j
public  class StringRepository {

    // 定义字符串列表
    private static final List<String> ITEMS = new ArrayList<String>() {{
        add("尊嘟鲨我");
        add("电子布洛芬");
        add("DDL战士");
        add("小狗文学奖 🦦");
        add("赛博功德+1");
        add("人间洗洁精");
        add("Ctrl_椰");
        add("防秃指挥部");
        add("Unicorn雾");
        add("Chill菠萝");
        add("Moonquakes");
        add("乌龙Tea");
        add("安安平安");
        add("柠檬松饼");
        add("Error404");
        add("量子咸鱼");
        add("黑胶脉冲");
        add("NeonGhost");
        add("小N");
        add("不吃香菜");
        add("季风与潮");
        add("鲸落🐋");
        add("奶盖团团");
        add("π_派大星");
        add("Pixel萌");
        add("糯米糍星球");
        add("芝士桃桃🧀");
        add("少喝可乐");
        add("半糖加冰");
        add("摆烂Pro");
    }};

    // 随机选取指定数量的项
    public static List<String> selectRandomItems(int numberOfItemsToSelect) {
        if (numberOfItemsToSelect > ITEMS.size()) {
            log.info("请求的数量超过了列表的最大值，将返回所有项。");
            return ITEMS;
        }

        List<String> tempItems = new ArrayList<>(ITEMS); // 创建副本以避免修改原始列表
        Collections.shuffle(tempItems, new Random()); // 使用Collections.shuffle进行随机打乱
        return tempItems.subList(0, numberOfItemsToSelect); // 返回前numberOfItemsToSelect个元素
    }

    public static Date generateRandomTime(Date startTime) {
        // 将Date转换为LocalDateTime
        LocalDateTime startLdt = startTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
        LocalDateTime nowLdt = LocalDateTime.now();

        // 计算开始时间和现在时间之间的秒数差异
        long secondsBetween = ChronoUnit.SECONDS.between(startLdt, nowLdt);

        if (secondsBetween <= 0) {
            throw new IllegalArgumentException("开始时间必须早于当前时间");
        }
        // 生成一个介于0和secondsBetween之间的随机秒数
        long randomSeconds = ThreadLocalRandom.current().nextLong(0, secondsBetween + 1);
        // 计算随机时间
        LocalDateTime randomLdt = startLdt.plusSeconds(randomSeconds);
        // 将LocalDateTime转换回Date
        return Date.from(randomLdt.atZone(ZoneId.systemDefault()).toInstant());
    }
}